<?php
/**
 * Created by PhpStorm.
 * User: jiyan
 * Date: 2017/4/28
 * Time: 10:44
 */

/**
 * 文件上传类
 */
include './Controller/CommonController.php';
class UpController extends CommonController{
    private $path;    //路径

    //    自动加载，找到未定义的函数
    public function __call($name, $arguments)
    {
        $this->error("{$name}方法未找见");
    }

//    构造函数
    public function __construct($path=null)
    {
        $this->path=is_null($path)?'./FileUp/'.date('Ymd').'/':$path;
    }

    /**
     * 总方法
     */
    public function all(){
//        1.重组数组
        $arr = $this->array_reset();
//        2.数据的筛选
        foreach($arr as $v){
            if(!$this->fiflter($v)){
                return false;
            }
        }
//        3.移动上传
        $str = $this->move($arr);
        if($str){
            echo "<h1 style='color: green;'>上传成功</h1>";
        }else{
            echo "<h1 style='color: red;'>上传失败</h1>";
        }
    }

//    重组数组
    public function array_reset(){
//        获得数组中的第一键值
        $arr = current($_FILES);
//        判断是否有数组存在，若有则是多文件上床，若没有则是单文件上传
        if(isset($arr['name'])){
//            多文件上传
//            创建空数组，存储重组后的数组
            $newarr = [];
//            遍历数据
            foreach($arr['name'] as $k=>$v){
                $newarr[]=[
                    'name' => $v,
                    'type' => $arr['type'][$k],
                    'tmp_name' => $arr['tmp_name'][$k],
                    'error' => $arr['error'][$k],
                    'size' => $arr['size'][$k],
                ];
            }
        }else{
//            单文件上传
            $newarr = arr;
        }
        return $newarr;
    }

    /**
     * @param $v
     * 数据的筛选
     */
    public function fiflter($v){
        switch($v){
            case !is_uploaded_file($v['tmp_name']):
                echo "<h1 style='red'>上传文件非法</h1>";
                return false;
                break;
            case $v['error']!=0:
                echo "<h1 style='red'>上传文件错误</h1>";
                return false;
                break;
            case $v['size']>3000000:
                echo "<h1 style='red'>上传文件大小</h1>";
                return false;
                break;
            default:
                return true;
                break;

        }
    }

    public function move($arr){
        foreach($arr as $k=>$v){
//            判断上传的临时文件是否为合法文件
            if(is_uploaded_file($v['tmp_name'])){
                $dir = $this->path;   //获得路径
                is_dir($dir)||mkdir($dir,0777,true); //创建目录
//                获得文件的类型
                $type = pathinfo($v['name']);
                $type = $type['extension'];
//                完整路径
                $path = $dir.'dh16_'.mt_rand(0,9999).'.'.$type;

                move_uploaded_file($v['tmp_name'],$path);

            }
        }
        return true;
    }
}